package AsignacionDeRevisores;
import callForPapers.*;
import sistema.*;

import java.util.ArrayList;
import java.util.List;

public class AsignacionPorAreasDeInteres extends AsignacionDeRevisores {
	
	public List<Usuario> filtrarRevisoresPorAreasDeInteres(List<Usuario> listaRevisores, Paper paper){ 
		// Me da una sublista de los revisores que tienen un área en común con el paper dado.
		// Transformo los SETs en LISTs
			List<AreaDeInteres> areasPaper = new ArrayList<AreaDeInteres>();
												areasPaper.addAll(paper.getAreasDeInteres());
			List<Usuario>  listaDeRevisores = new ArrayList<Usuario>();
												listaDeRevisores.addAll(listaRevisores);
			List<Usuario>  revisoresFiltrados = new ArrayList<Usuario>();
												
			for (Usuario revisorActual: listaDeRevisores){
				// si tiene al menos un área en común, lo pone en la lista:
				if ( this.tieneAlMenos1AreaEnComun( areasPaper, revisorActual.getAreasDeInteres() ) ){
					 revisoresFiltrados.add( revisorActual );
				}	 
			}
		return revisoresFiltrados;
	}
	public void asignarRevisores(CallForPaper cfp){
		List<Paper> unicoPaper = new ArrayList<Paper>();
		// Conversores de Set a List:
		List<Usuario> revisores = new ArrayList<Usuario>();
				revisores.addAll(this.obtenerListaDeRevisores(cfp));
		List<Paper> papers = new ArrayList<Paper>();
				papers.addAll(this.obtenerListaDePapers(cfp));
		
		for (Paper paperActual: papers){
			unicoPaper.add(paperActual); 
			// Lista de Revisores con áreas en común:
			List<Usuario> revisoresConAreasEnComun = new ArrayList<Usuario>();
			revisoresConAreasEnComun = filtrarRevisoresPorAreasDeInteres(revisores,paperActual); 
			// si la lista es menor a 3 completo al azar:
			List<Usuario> listaCompletaDeRevisores = new ArrayList<Usuario>();
			listaCompletaDeRevisores = completarListaRevisoresAlAzar(revisores, revisoresConAreasEnComun);
			// Asignador:
			super.asignarPapersARevisores(listaCompletaDeRevisores, unicoPaper);
		}
	}

}
